package cn.satoken.common;

import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * <h3>saToken</h3>
 * <p></p>
 *
 * @author gdw
 * @since 2025-02-07 10:13:15
 */
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    // 处理 NotLoginException 异常
    @ExceptionHandler(value = NotLoginException.class)
    public SaResult handleNotLoginException(NotLoginException e) {
        // 你可以根据异常的类型或消息返回不同的错误信息
        return SaResult.error("用户未登录或Token无效").setCode(401);
    }

    //处理校验参数异常
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public SaResult handleValidationException(MethodArgumentNotValidException ex) {
        String msg = ex.getBindingResult().getFieldError().getDefaultMessage();
        return SaResult.error(msg);
    }

    // 处理其他异常（可选）
    @ExceptionHandler(value = Exception.class)
    public SaResult handleException(Exception e) {
        // 处理其他未捕获的异常
        return SaResult.error("服务器内部错误"+e.getMessage()).setCode(500);
    }
}
